home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / pidentd / pidentd-2.6.1 / testdir / test1.c < prev   
C/C++ Source or Header  |  1995-07-30  |  3KB  |  147 lines

  1. /*
  2. ** A small test program. If run without any arguments, it should
  3. ** return *your* user name if the machine it is run on has a correctly
  4. ** installed and running Ident server.
  5. **
  6. ** Last modified: 11 August 1993 by Michael Kuch
  7. **
  8. ** Author: Peter Eriksson <pen@lysator.liu.se>
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <sys/time.h>
  13. #include <sys/types.h>
  14. #include <sys/socket.h>
  15. #include <netinet/in.h>
  16. #include <arpa/inet.h>
  17. #include <ctype.h>
  18.  
  19.  
  20. int Toupper(c)
  21.   int c;
  22. {
  23.   if (islower(c))
  24.     return toupper(c);
  25.   else
  26.     return c;
  27. }
  28.  
  29.  
  30. /*
  31. ** Compare two strings, case insensitive
  32. */
  33. int Stricmp(s1, s2)
  34.   char *s1, *s2;
  35. {
  36.   int diff;
  37.  
  38.  
  39.   while (!(diff = Toupper(*s1) - Toupper(*s2)) && *s1)
  40.     s1++, s2++;
  41.  
  42.   return diff;
  43. }
  44.  
  45.  
  46. Perror(str)
  47.   char *str;
  48. {
  49.   perror(str);
  50.   exit(1);
  51. }
  52.  
  53.  
  54. main(argc,argv)
  55.   int argc;
  56.   char *argv[];
  57. {
  58.   int fd;
  59.   struct sockaddr_in addr;
  60.   int addrlen;
  61.   int port;
  62.   FILE *fp_in, *fp_out;
  63.   int lport, fport;
  64.   char buffer[8192];
  65.   char *cp;
  66.   char reply_type[81];
  67.   char opsys_or_error[81];
  68.   char identifier[1024];
  69.   
  70.   
  71.   if (argc > 3)
  72.   {
  73.     printf("usage: %s [{host-ip-number} [{port number}]]", argv[0]);
  74.     exit(1);
  75.   }
  76.   
  77.   fd = socket(AF_INET, SOCK_STREAM, 0);
  78.   if (fd == -1)
  79.     Perror("socket");
  80.  
  81.   addr.sin_family = AF_INET;
  82.   if(argc > 1)
  83.     addr.sin_addr.s_addr = inet_addr(argv[1]);
  84.   else
  85.     addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  86.  
  87.   if (argc > 2)
  88.     port = atoi(argv[2]);
  89.   else
  90.     port = 113;
  91.   
  92.   addr.sin_port = htons(port);
  93.   addrlen = sizeof(addr);
  94.  
  95.   if (connect(fd, &addr, addrlen) == -1)
  96.     Perror("connect");
  97.  
  98.   addrlen = sizeof(addr);
  99.   if (getsockname(fd, &addr, &addrlen) == -1)
  100.     Perror("getsockname");
  101.  
  102.   fp_in  = fdopen(fd, "r");
  103.   fp_out = fdopen(fd, "w");
  104.   if (!fp_in || !fp_out)
  105.     Perror("fdopen");
  106.  
  107.   fprintf(fp_out, "%d , %d\n", ntohs(addr.sin_port), port);
  108.   fflush(fp_out);
  109.  
  110.   if (fgets(buffer, sizeof(buffer)-1, fp_in) == NULL)
  111.     Perror("fgets");
  112.  
  113.   shutdown(fd, 1);
  114.  
  115.   cp = buffer;
  116.   while (*cp != 0 && (*cp < ' ' || isspace(*cp)))
  117.       ++cp;
  118.   
  119.   argc = sscanf(cp, "%d , %d : %[^ \t\n\r:] : %[^\t\n\r:] : %[^\n\r]",
  120.         &lport, &fport, reply_type, opsys_or_error, identifier);
  121.   if (argc < 3)
  122.   {
  123.     fprintf(stderr, "sscanf: too few arguments (%d)\n", argc);
  124.     exit(1);
  125.   }
  126.   if (Stricmp(reply_type, "ERROR") == 0)
  127.   {
  128.     printf("Ident error: error code: %s\n", opsys_or_error);
  129.     exit(1);
  130.   }
  131.   else if (Stricmp(reply_type, "USERID") != 0)
  132.   {
  133.     printf("Ident error: illegal reply type: %s\n", reply_type);
  134.     exit(1);
  135.   }
  136.   else
  137.     printf("Ident returned:\n");
  138.     printf("\tOpsys and Charset (if -c specified for identd) = %s\n",
  139.                  opsys_or_error);
  140.     printf("\tIdentifier: %s\n", identifier);
  141.  
  142.   fclose(fp_out);
  143.   fclose(fp_in);
  144.  
  145.   exit(0);
  146. }
  147.